
let path = require("path");
let fs = require("fs");
let fsp = require("fs/promises");

// 站点的默认位置 => 用户自行指定
let siteUrl = path.join(__dirname, "../../site");

function render(pathname, res) {

    return new Promise(function (resolve, reject) {


        // 在服务器中搭建站点
        var readPath = path.join(siteUrl, pathname);

        console.log("readPath", readPath);

        var bool = fs.existsSync(readPath);  // 判断文件/文件夹是否存在  

        //  传入的 basename => 拼接之后 可能是文件 也可能是文件夹  
        // 文件 => 直接读取
        // 文件夹 => 任务读取目录下的index.html

        if (bool) {

            var info = fs.statSync(readPath);
            if (info.isFile()) {  //如果是文件
                // 针对不同类型的文件 => 服务器返回数据时,返回对应的文件类型
                var ext = path.extname(readPath);
                // console.log(ext);

                // 服务器响应时的数据的类型和编码格式
                switch (ext) {
                    case ".html":
                        res.setHeader("Content-Type", "text/html;charset=utf-8");
                        break;
                    case ".css":
                        res.setHeader("Content-Type", "text/css;charset=utf-8");
                        break;
                    case ".js":
                        res.setHeader("Content-Type", "text/javascript;charset=utf-8");
                        break;
                    case ".json":
                        res.setHeader("Content-Type", "text/json;charset=utf-8");
                        break;
                    case ".png":
                        res.setHeader("Content-Type", "image/png");
                        break;
                    case ".jpg":
                        res.setHeader("Content-Type", "image/jpg");
                        break;
                    case ".gif":
                        res.setHeader("Content-Type", "image/gif");
                        break;
                    case ".webp":
                        res.setHeader("Content-Type", "image/webp");
                        break;
                }

                // 从站点(site)中找到对应路径的文件进行渲染
                fsp.readFile(readPath).then(ctx => {
                    // console.log("ctx",ctx);
                    res.write(ctx);
                }).catch(err => {
                    // res.write(err.stack)
                    resolve(false);
                }).finally(() => {
                    res.end()
                    resolve(true);
                })
            } else if (info.isDirectory()) {  // 如果是文件夹
                // 默认读取文件夹下的index.html
                pathname = pathname + "/index.html";
                render(pathname, res);
            }

        }else{
            // res.end("Not Found!");
            resolve(false);
        }

    })
}

module.exports = {
    render: render,
}